A comprehensive library for creating static, animated, and interactive visualizations


faqs


setup

pip install matplotlib
import matplotlib as mpl
mpl.__version__
#  '3.3.0'

basics

Architecture:

ipython magic

Allow matplotlib plots to be plotted inline in the notebook:

%matplotlib inline 

Allow modification of figures after they have been rendered:

%matplotlib notebook 

style

mpl.style.use(['ggplot'])

pyplot

import matplotlib.pyplot as plt

scatter

plt.plot(1, 1, 'o')

hist

plt.hist(x)
plt.title(r'Normal distribution with $\mu=0, \sigma=1$')
plt.xlabel('x-axis-label')
plt.ylabel('y-axis-label')
plt.text(x, y, 'label')
plt.savefig('a_histogram.png)
plt.show()

scatter

plt.scatter(x, y)

pcolor

Heat map

plt.pcolor(df_pivot, cmap='Rdbu')
plt.colourbar()
plt.show()

annotate

# Annotate arrow
plt.annotate('label',                     
             xy=(32, 70),             # place head of the arrow at point (year 2012 , pop 70)
             xytext=(28, 20),         # place base of the arrow at point (year 2008 , pop 20)
             xycoords='data',         # will use the coordinate system of the object being annotated 
             arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='blue', lw=2)
            )

# Annotate Text
plt.annotate('2008 - 2011 Financial Crisis', # text to display
             xy=(28, 30),                    # start the text at at point (year 2008 , pop 30)
             rotation=72.5,                  # based on trial and error to match the arrow
             va='bottom',                    # want the text to be vertically 'bottom' aligned
             ha='left',                      # want the text to be horizontally 'left' algned.
            )

line of best fit

# plot line of best fit
plt.plot(x, fit[0] * x + fit[1], color='red') # recall that x is the Years
plt.annotate('y={0:.0f} x + {1:.0f}'.format(fit[0], fit[1]), xy=(2000, 150000))

subplots

fig = plt.figure() # create figure

ax0 = fig.add_subplot(1, 2, 1) # add subplot 1 (1 row, 2 columns, first plot)
ax1 = fig.add_subplot(1, 2, 2) # add subplot 2 (1 row, 2 columns, second plot). See tip below**

# Subplot 1: Box plot
df_CI.plot(kind='box', color='blue', vert=False, figsize=(20, 6), ax=ax0) # add to subplot 1
ax0.set_title('Box Plots of Immigrants from China and India (1980 - 2013)')
ax0.set_xlabel('Number of Immigrants')
ax0.set_ylabel('Countries')

# Subplot 2: Line plot
df_CI.plot(kind='line', figsize=(20, 6), ax=ax1) # add to subplot 2
ax1.set_title ('Line Plots of Immigrants from China and India (1980 - 2013)')
ax1.set_ylabel('Number of Immigrants')
ax1.set_xlabel('Years')

plt.show()

Artist

Primitive

  • Line2D
  • Rectangle
  • Circle
  • Text

Composite

  • Axis
  • Tick
  • Axes - the most important composite artist because it is where most of the plotting methods are defined - e.g.ย for creating and manipulating the ticks, axis lines, grid and plot background
  • Figure - top-level object that contains and manages all of the elements in a given graphic
from matplotlib.figure import Figure
fig = Figure()
ax = fig.add_subplot(111) # create an axes artist
# 111 means 1 row, 1 col, cell 1

backend_bases

FigureCanvas

Encompasses the area onto which the figure is drawn

from matplotlib.backend_bases import FigureCanvasAgg as FigureCanvas
canvas = FigureCanvas(fig) # see Figure

Agg = anti-green geometry - a high performance library

Renderer

An instance of the Renderer class that knows how to draw on the FigureCanvas

Event

Handles user input such as keyboard strokes and mouse clicks


??

axis labels

ax = plt.subplots()

# label names
row_labels = list(df.columns)
col_labels = list(df.index)

# move ticks and labels to the center
ax.set_xticks(np.arange(df.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(df.shape[0]) + 0.5, minor=False)

# insert labels
ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(col_labels, minor=False)

# rotate labels
plt.xticks(rotation=90)

figure size

width = 12
height = 10
plt.figure(figsize=(width, height))

plot

def PlotPolly(model, independent_variable, dependent_variabble, Name):
    x_new = np.linspace(15, 55, 100)
    y_new = model(x_new)

    plt.plot(independent_variable, dependent_variabble, '.', x_new, y_new, '-')
    plt.title('Polynomial Fit with Matplotlib for Price ~ Length')
    ax = plt.gca()
    ax.set_facecolor((0.898, 0.898, 0.898))
    fig = plt.gcf()
    plt.xlabel(Name)
    plt.ylabel('Price of Cars')

    plt.show()
    plt.close()

appendix: colors

import matplotlib as mpl
for name, hex in mpl.colors.cnames.items():
    print(name, hex)
#  aliceblue #F0F8FF
#  antiquewhite #FAEBD7
#  aqua #00FFFF
#  aquamarine #7FFFD4
#  azure #F0FFFF
#  beige #F5F5DC
#  bisque #FFE4C4
#  black #000000
#  blanchedalmond #FFEBCD
#  blue #0000FF
#  blueviolet #8A2BE2
#  brown #A52A2A
#  burlywood #DEB887
#  cadetblue #5F9EA0
#  chartreuse #7FFF00
#  chocolate #D2691E
#  coral #FF7F50
#  cornflowerblue #6495ED
#  cornsilk #FFF8DC
#  crimson #DC143C
#  cyan #00FFFF
#  darkblue #00008B
#  darkcyan #008B8B
#  darkgoldenrod #B8860B
#  darkgray #A9A9A9
#  darkgreen #006400
#  darkgrey #A9A9A9
#  darkkhaki #BDB76B
#  darkmagenta #8B008B
#  darkolivegreen #556B2F
#  darkorange #FF8C00
#  darkorchid #9932CC
#  darkred #8B0000
#  darksalmon #E9967A
#  darkseagreen #8FBC8F
#  darkslateblue #483D8B
#  darkslategray #2F4F4F
#  darkslategrey #2F4F4F
#  darkturquoise #00CED1
#  darkviolet #9400D3
#  deeppink #FF1493
#  deepskyblue #00BFFF
#  dimgray #696969
#  dimgrey #696969
#  dodgerblue #1E90FF
#  firebrick #B22222
#  floralwhite #FFFAF0
#  forestgreen #228B22
#  fuchsia #FF00FF
#  gainsboro #DCDCDC
#  ghostwhite #F8F8FF
#  gold #FFD700
#  goldenrod #DAA520
#  gray #808080
#  green #008000
#  greenyellow #ADFF2F
#  grey #808080
#  honeydew #F0FFF0
#  hotpink #FF69B4
#  indianred #CD5C5C
#  indigo #4B0082
#  ivory #FFFFF0
#  khaki #F0E68C
#  lavender #E6E6FA
#  lavenderblush #FFF0F5
#  lawngreen #7CFC00
#  lemonchiffon #FFFACD
#  lightblue #ADD8E6
#  lightcoral #F08080
#  lightcyan #E0FFFF
#  lightgoldenrodyellow #FAFAD2
#  lightgray #D3D3D3
#  lightgreen #90EE90
#  lightgrey #D3D3D3
#  lightpink #FFB6C1
#  lightsalmon #FFA07A
#  lightseagreen #20B2AA
#  lightskyblue #87CEFA
#  lightslategray #778899
#  lightslategrey #778899
#  lightsteelblue #B0C4DE
#  lightyellow #FFFFE0
#  lime #00FF00
#  limegreen #32CD32
#  linen #FAF0E6
#  magenta #FF00FF
#  maroon #800000
#  mediumaquamarine #66CDAA
#  mediumblue #0000CD
#  mediumorchid #BA55D3
#  mediumpurple #9370DB
#  mediumseagreen #3CB371
#  mediumslateblue #7B68EE
#  mediumspringgreen #00FA9A
#  mediumturquoise #48D1CC
#  mediumvioletred #C71585
#  midnightblue #191970
#  mintcream #F5FFFA
#  mistyrose #FFE4E1
#  moccasin #FFE4B5
#  navajowhite #FFDEAD
#  navy #000080
#  oldlace #FDF5E6
#  olive #808000
#  olivedrab #6B8E23
#  orange #FFA500
#  orangered #FF4500
#  orchid #DA70D6
#  palegoldenrod #EEE8AA
#  palegreen #98FB98
#  paleturquoise #AFEEEE
#  palevioletred #DB7093
#  papayawhip #FFEFD5
#  peachpuff #FFDAB9
#  peru #CD853F
#  pink #FFC0CB
#  plum #DDA0DD
#  powderblue #B0E0E6
#  purple #800080
#  rebeccapurple #663399
#  red #FF0000
#  rosybrown #BC8F8F
#  royalblue #4169E1
#  saddlebrown #8B4513
#  salmon #FA8072
#  sandybrown #F4A460
#  seagreen #2E8B57
#  seashell #FFF5EE
#  sienna #A0522D
#  silver #C0C0C0
#  skyblue #87CEEB
#  slateblue #6A5ACD
#  slategray #708090
#  slategrey #708090
#  snow #FFFAFA
#  springgreen #00FF7F
#  steelblue #4682B4
#  tan #D2B48C
#  teal #008080
#  thistle #D8BFD8
#  tomato #FF6347
#  turquoise #40E0D0
#  violet #EE82EE
#  wheat #F5DEB3
#  white #FFFFFF
#  whitesmoke #F5F5F5
#  yellow #FFFF00
#  yellowgreen #9ACD32